tg-me.com/oracle_dbd/931
Last Update:
🧠 SQL-загадка с подвохом
Друзья, всем привет! 👋
Понедельник — отличный день, чтобы разогреть мозги небольшим техническим кейсом 💡
Сегодня короткий, но полезный пост — с ответом сразу.
📌 Дано:
create table demo_table (
ID char(4 CHAR),
value VARCHAR2(64 CHAR)
);
Известно, что есть следующие индексы и ключи:
create index DEMO_TBL_VALUE_IX on demo_table (VALUE);
alter table DEMO_TABLE
add constraint DEMO_TBL_PK primary key (ID)
using index;
Вопрос (c подвохом)
почему такая вставка проходит:
insert into demo_table values('0001', 1000);
А эта падает с ошибкой
ORA-01722: неверное число
:insert into demo_table values('0002', 'Test');
Ответ
create index DEMO_TBL_NUM_IX on demo_table(trunc(VALUE));
Такая конструкция называется индексом по функции (function based index).
В реальных проектах она используется довольно часто, например, когда на строковое поле мы создаем индекс UPPER(<column>).
Особенность такого индекса в том, что в листьях он хранит результат выполнения этой функции для каждого rowid.
Поэтому никакой магии тут нет: если мы не можем записать в индекс результат функции, то и вставку выполнить мы не можем.
Ставьте лайк, если было познавательно.
Всем хорошей и продуктивной рабочей недели! 🔥
#oracle #sql #оптимизация #задачка #Pavel_Dolganov
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀